home *** CD-ROM | disk | FTP | other *** search
/ The Big Mouth 10 / Big_Mouth_The_10_1996_-_Side_A.d64 / dots and boxes (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  5KB  |  245 lines

  1. 100 poke 53280,5:poke 53281,11
  2. 110 print"[147][155]dots and boxes":gosub5000:gosub5000
  3. 120 a=rnd(-ti)
  4. 140 print"[147]want the rules? (y/n)
  5. 150 [161]a$:[139]a$[178]"y"[167]8000
  6. 160 x[178][187](1):[139]a$[179][177]"n"[167]150
  7. 170 [156]:[133]"your name  .cmdcmdcmd";n$
  8. 180 [139]n$[179]"a"[176]n$[177]"z"[167]170
  9. 190 [134]b%(49),l%(13,19),t%(6),e%(13)
  10. 200 c$(0)[178][200](n$,1):c$[178]"pet"
  11. 210 c$(1)[178]"p"
  12. 215 [139]c$(0)[178]"p"[167]c$[178]" me":c$(1)[178]"m"
  13. 220 [150][165]a(x)[178][181](b%(x)[173]16)
  14. 230 z$[178]"          ":d$[178]"":r$[178]""
  15. 240 [129]i[178]1[164]25:d$[178]d$[170]"":r$[178]r$[170]""
  16. 250 z$[178]z$[170]" ":[130]:z$[178]z$[170]""
  17. 260 [129]i[178]2[164]8[169]2
  18. 270 [135]c$(i),c(i),c(i[170]1):[130]
  19. 280 [129]i[178]1[164]24:[135]x:b%(x)[178]65:[130]
  20. 500 [143]***draw board***
  21. 510 [153]"load";:[129]i[178]1[164]6
  22. 520 [153]"   (NULL)   (NULL)   (NULL)   (NULL)   (NULL)   (NULL)"
  23. 530 [130]:[153]"":[129]i[178]0[164]4:[153]
  24. 540 [153]"  ";:[129]j[178]0[164]4
  25. 550 [153]"   ";[199](65[170]i[172]5[170]j);
  26. 560 [130]j,i
  27. 570 [153]"":[129]i[178]1[164]7
  28. 580 [153][166]28)"           "
  29. 590 [130]:[153]""
  30. 600 [153][166]31)"score"
  31. 610 [153][166]29)"you   ";c$;"
  32. 620 printspc(29)"box sides
  33. 630 [153][166]31)"(NULL)-8-(NULL)cmdcmdcmdcmdcmd(NULL)   (NULL)cmdcmdcmdcmdcmd4   6cmdcmdcmdcmdcmd(NULL)   (NULL)cmdcmdcmdcmdcmd(NULL)-2-(NULL)
  34. 640 gosub7040
  35. 650 printz$;"do you want to start?"
  36. 660 geta$:ifa$="n"then2000
  37. 670 x=rnd(1):ifa$<>"y"then660
  38. 1000 rem***human move***
  39. 1010 g=0:sb=0
  40. 1020 printz$;"which box ? ";
  41. 1030 geta$:ifa$=""then1030
  42. 1040 n=asc(a$)-65
  43. 1050 ifn<0orn>24then1030
  44. 1060 r=int(n/5):n=n+9+2*r
  45. 1070 ifb%(n)<64then1100
  46. 1080 printz$;"that box is taken
  47. 1090 [141]5000:[137]1020
  48. 1100 [153]a$,"which side ? ";
  49. 1110 [161]b$:[139]b$[178]""[167]1110
  50. 1120 s[178][198](b$)[171]48:[139]s[175]1[167]1110
  51. 1130 [139]s[179]2[176]s[177]8[167]1110
  52. 1140 [153]s
  53. 1170 [139](b%(n)[175]c(s))[178]0[167]1220
  54. 1180 [153]z$;"that side is taken
  55. 1190 gosub5000
  56. 1200 printz$;"which side of box ";
  57. 1210 printa$;" ?";:goto1110
  58. 1220 gosub6000:printm$+c$(s)
  59. 1230 gosub3000
  60. 1240 n=n+c(s+1):s=10-s
  61. 1250 ifb%(n)>64then1270
  62. 1260 gosub3000
  63. 1270 ifsbthen1000
  64. 2000 rem***pet move***
  65. 2010 g=1:sb=0
  66. 2020 gosub4000:r=int(n/7)-1
  67. 2030 printz$;"i will play box ";
  68. 2140 printz$;"i will play box ";
  69. 2150 printchr$(n+56-2*r),
  70. 2160 print"side";s
  71. 2170 gosub6000:printm$+c$(s)
  72. 2180 gosub5000:gosub3000
  73. 2230 n=n+c(s+1):s=10-s
  74. 2240 ifb%(n)<65thengosub3000
  75. 2250 ifsbthen2000
  76. 2260 goto1000
  77. 3000 rem***update statue***
  78. 3005 x=c(s)
  79. 3010 onfna(n)goto3050,3300,3400
  80. 3020 b%(n)=b%(n)+16+x
  81. 3030 ifb%(n)>64thengosub7000
  82. 3040 return
  83. 3050 rem***chain***
  84. 3060 sh=0:i=0
  85. 3070 k=2^i:if(b%(n)andk)or(k=x)then3250
  86. 3080 b=n+c(2*i+3)
  87. 3090 iffna(b)<>2then3230
  88. 3100 forj=1tolc:l=l%(j,0)
  89. 3110 foru=1tol:ifl%(j,u)<>bthen3220
  90. 3120 ifj=shthen3020
  91. 3130 ifshthen3160
  92. 3140 l%(j,l+1)=n:l%(j,0)=l+1
  93. 3150 sh=j:goto3250
  94. 3160 forv=1tol%(sh,0)
  95. 3170 l%(j,l+v)=l%(sh,v):nextv
  96. 3180 l%(j,0)=l+l%(sh,0)
  97. 3190 forv=0tol%(lc,0)
  98. 3200 l%(sh,v)=l%(lc,v):nextv
  99. 3210 lc=lc-1:goto3020
  100. 3220 nextu,j
  101. 3230 ifshthen3020
  102. 3240 lc=lc+1:l%(lc,1)=n:l%(lc,0)=1:sh=lc
  103. 3250 i=i+1:ifi<4then3070
  104. 3260 goto3020
  105. 3300 rem***save as capture***
  106. 3310 c=c+1:t%(c)=n:goto3020
  107. 3400 rem***capture***
  108. 3410 forj=1tolc:l=l%(j,0)
  109. 3420 foru=1tol:ifl%(j,u)=nthen3440
  110. 3430 nextu,j
  111. 3440 fori=1toc:ift%(i)=nthen3460
  112. 3450 nexti
  113. 3460 t%(i)=t%(c):c=c-1
  114. 3470 ifl=1thensh=j:goto3190
  115. 3480 l%(j,u)=l%(j,l):l%(j,0)=l-1
  116. 3490 goto3020
  117. 4000 rem***smart moves***
  118. 4010 ifc=0then4060
  119. 4020 forj=1toc:n=t%(j)
  120. 4030 gosub4900
  121. 4040 iffna(n+c(2*i+3))>2then4870
  122. 4050 nextj
  123. 4060 v=0:fori=1tolc
  124. 4070 v=v+l%(i,0):next
  125. 4080 ifa>vthen4650
  126. 4090 rem***3rd phase***
  127. 4100 ifc=0then4770
  128. 4110 iflc=1thenn=t%(1):goto4860
  129. 4120 fori=1tolc:l=l%(i,0)
  130. 4130 e%(i)=0:forj=1tol
  131. 4140 iffna(l%(i,j))=2then4170
  132. 4150 if(l=3)or(l>4)thenn=l%(i,j):goto4860
  133. 4160 e%(i)=e%(i)+1
  134. 4170 nextj,i
  135. 4180 s=0:forj=1tolc
  136. 4190 ife%(j)=0then4330
  137. 4200 if(l%(j,0)=4)and(e%(j)=1)then4600
  138. 4210 ifl%(j,0)=2then4320
  139. 4220 p=0:fork=1to4
  140. 4230 ifb%(l%(j,k))<48then4260
  141. 4240 ifp=0thenp=l%(j,k)
  142. 4250 q=l%(j,k)
  143. 4260 nextk
  144. 4270 n=p:gosub4900:p=p+c(2*i+3)
  145. 4280 n=q:gosub4900:q=q+c(2*i+3)
  146. 4290 fori=0to3:if(b%(q)and(2^i))then4310
  147. 4300 ifp=q+c(2*i+3)then4320
  148. 4310 next:goto4600
  149. 4320 s=s+1:x=j:ifs=2then4600
  150. 4330 nextj
  151. 4340 s=0:forj=1tolc
  152. 4350 ifx=jthen4370
  153. 4360 ifl%(j,0)<3thens=s+1
  154. 4370 next:j=x
  155. 4380 if(sand1)then4600
  156. 4390 rem***sacrifice***
  157. 4400 fori=1tol%(j,0):n=l%(j,i)
  158. 4410 iffna(n)=2then4430
  159. 4420 next
  160. 4430 fori=0to3:k=2^i
  161. 4440 if(b%(n)andk)then4460
  162. 4450 iffna(n+c(2*i+3))<>3then4870
  163. 4460 next
  164. 4600 rem***capture in chain j***
  165. 4610 fork=1tol%(j,0)
  166. 4620 ifb%(l%(j,k))>48thenn=l%(j,k):goto4860
  167. 4630 nextk
  168. 4650 rem***1st phase***
  169. 4660 x=65:ifcthenn=t%(1):goto4860
  170. 4670 n=int(9+33*rnd(1)):q=n
  171. 4680 iffna(n)>1then4740
  172. 4690 fori=0to3:k=2^i
  173. 4700 if(b%(n)andk)then4730
  174. 4710 b=n+c(2*i+3):ifb%(b)=xthen4730
  175. 4720 iffna(b)<>2then4870
  176. 4730 next
  177. 4740 n=n+1:ifn=42thenn=9
  178. 4750 ifn<>qthen4680
  179. 4760 ifx=65thenx=-1:goto4670
  180. 4770 rem***must give away***
  181. 4780 m=99:fori=1tolc
  182. 4790 ifl%(i,0)<mthenm=l%(i,0):n=l%(i,1)
  183. 4800 next:ifm=1then4860
  184. 4810 fori=0to3:k=2^i
  185. 4820 if(b%(n)andk)then4840
  186. 4830 iffna(n+c(2*i+3))=2then4870
  187. 4840 next
  188. 4850 rem***find side***
  189. 4860 gosub4900
  190. 4870 s=2*i+2:return
  191. 4900 fori=0to3:k=2^i
  192. 4910 if(b%(n)andk)thennext
  193. 4920 return
  194. 5000 rem***delay***
  195. 5010 ford=1to2000:next:return
  196. 6000 rem***graphics***
  197. 6010 m$=""+left$(d$,4+4*r)
  198. 6020 m$=m$+left$(r$,4+4*(n-9-7*r))
  199. 6030 return
  200. 7000 rem***fill in***
  201. 7010 s$="   [157][157][157] "+c$(g)+" [157][157][157]   [146]"
  202. 7020 c(g)=c(g)+1:r=int(n/7)-1:sb=1
  203. 7030 gosub6000:printm$+s$
  204. 7040 print""
  205. 7050 printspc(29)"";c(0)
  206. 7060 print"[145]";spc(35);c(1)
  207. 7070 a=25-c(0)-c(1)
  208. 7080 ifathenreturn
  209. 7090 printz$;" game over ":gosub5000
  210. 7100 print"[147]":ifc(1)>17then7180
  211. 7110 ifc(1)>12then7160
  212. 7120 ifc(1)>7then7140
  213. 7130 print"i surrender !!":goto 7200
  214. 7140 print"you win-but it was close
  215. 7150 [137]7200
  216. 7160 [153]"i win ! hard luck,";n$
  217. 7170 [137]7200
  218. 7180 [153]"you were hammered,";n$
  219. 7190 [153]"take up chess-it's easier
  220. 7200 print"play again?
  221. 7210 [161]a$:[139]a$[178]"y"[167] 170
  222. 7220 [139]a$[179][177]"n"[167] 7210
  223. 7230 [129]t[178]1 [164] 500:[130]:[147]"the main menu/bm",8,1
  224. 8000 [143]***rules***
  225. 8010 [153]"load   dots and boxes-rules
  226. 8020 print"1 we take it in turn to";
  227. 8030 print" complete one      side o";
  228. 8040 print"f a box
  229. 8050 [153]"2 if you complete the 4th";
  230. 8060 [153]" side of a box   you win ";
  231. 8070 [153]"that box and must play ag";
  232. 8080 [153]"ain
  233. 8090 print"3 the winner has the most";
  234. 8100 print" boxes at the    end of t";
  235. 8110 print"he game
  236. 8120 [153]"4 to play, use a-y to pic";
  237. 8130 [153]"k the box then   2,4,6,8 ";
  238. 8140 [153]"as indicated for the side
  239. 8150 goto170
  240. 9000 data"[192][192][192]",1,7,"[157][221][157][221][157][221]",2,-1
  241. 9010 data"[221][157][221][157][221]",4,1,"[145][192][192][192]",8,-7
  242. 9020 data1,2,3,4,5,6,7,8,14,15,21,22
  243. 9030 data28,29,35,36,42,43,44,45,46
  244. 9040 data47,48,49
  245.